--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / activeConversationStore.js
Displaying Raw • Download
meshchatx/src/frontend/js/activeConversationStore.js e0f1f99cd1c208c5008a936230c38e448dddd45d (e0f1f99c) Text, 2.62 KB
T8b949e// SPDX-License-Identifier: 0BSD
T8b949e/**
* Tracks destination hashes open in Messages panes for notification suppress/clear.
*/
Tff7b72import Tb4b4b4{ Te6edf3normalizeDestinationHash Tb4b4b4} Tff7b72from Ta5d6ff"./notificationPolicy.js"Tb4b4b4;
T8b949e/** @type {Set<string>} */
Tff7b72const Te6edf3openHashes Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e/** @type {Set<(hashes: string[]) => void>} */
Tff7b72const Te6edf3listeners Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72function Te6edf3notifyListenersTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3snapshot Tff7b72= Te6edf3listOpenDestinationHashesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3listener Tff7b72of Te6edf3listenersTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3listenerTb4b4b4(Te6edf3snapshotTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"activeConversationStore listener failed"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* Replace the full set of open conversation destination hashes.
* @param {Iterable<string>|string[]|null|undefined} hashes
*/
Tff7b72export Tff7b72function Te6edf3setOpenDestinationHashesTb4b4b4(Te6edf3hashesTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3next Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3hashesTb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3h Tff7b72of Te6edf3hashesTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3n Tff7b72= Te6edf3normalizeDestinationHashTb4b4b4(Te6edf3hTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3nTb4b4b4) Tb4b4b4{
Te6edf3nextTb4b4b4.Te6edf3addTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72let Te6edf3changed Tff7b72= Te6edf3nextTb4b4b4.Te6edf3size Tff7b72!== Te6edf3openHashesTb4b4b4.Te6edf3sizeTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3changedTb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3h Tff7b72of Te6edf3nextTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3openHashesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3hTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3changed Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3changedTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3openHashesTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3h Tff7b72of Te6edf3nextTb4b4b4) Tb4b4b4{
Te6edf3openHashesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3hTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3notifyListenersTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} hash
*/
Tff7b72export Tff7b72function Te6edf3addOpenDestinationHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3n Tff7b72= Te6edf3normalizeDestinationHashTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3n Tff7b72|| Te6edf3openHashesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3openHashesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4;
Te6edf3notifyListenersTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} hash
*/
Tff7b72export Tff7b72function Te6edf3removeOpenDestinationHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3n Tff7b72= Te6edf3normalizeDestinationHashTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3n Tff7b72|| Tff7b72!Te6edf3openHashesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3openHashesTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4;
Te6edf3notifyListenersTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @returns {string[]}
*/
Tff7b72export Tff7b72function Te6edf3listOpenDestinationHashesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657ArrayTb4b4b4.Tff7b72fromTb4b4b4(Te6edf3openHashesTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string|null|undefined} hash
* @returns {boolean}
*/
Tff7b72export Tff7b72function Te6edf3hasOpenDestinationHashTb4b4b4(Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3n Tff7b72= Te6edf3normalizeDestinationHashTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657BooleanTb4b4b4(Te6edf3n Tff7b72&& Te6edf3openHashesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {(hashes: string[]) => void} listener
* @returns {() => void} unsubscribe
*/
Tff7b72export Tff7b72function Te6edf3subscribeOpenDestinationHashesTb4b4b4(Te6edf3listenerTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3listener Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Te6edf3listenersTb4b4b4.Te6edf3addTb4b4b4(Te6edf3listenerTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3listenersTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3listenerTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/** Test helper. */
Tff7b72export Tff7b72function Te6edf3clearOpenDestinationHashesForTestsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3openHashesTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3listenersTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────